Como ver que cambios se han hecho en un archivo o como seguir la pista de un cambio concreto utilizando los comandos de git log, show, diff.
Con el comando git log podemos ver todo el registro de commits que se han hecho en el repositorio, por defecto el comando nos muestra solo quien ha hecho el commit, cuando lo ha hecho, el comentario del commit y poco mas, para obtener mas información podemos usar los siguientes comandos:
git log -p
git log -p <ARCHIVO>
git log --name-only
git log --name-status
git log --source --all
git log --graph --source --all
NOTA: La rama aparece a la derecha del hash del commit
Normalmente cuando hacemos un git log se nos muestra el log a partir de la rama en la que estamos (o el commit que le indiquemos) hacia atras en la historia, pero cuando utilizamos la opcion --all se nos muestra la historia completa de proyecto, por lo tanto si hay ramas mas recientes que la rama en la que estamos haciendo el git log, se nos mostrarán primero, esto tiene sentido cuando hacemos un git log --source --all --graph, pero la rama que queremos consultar probablemente quede perdida entre todas las ramas mas recientes, si queremos buscarla podemos usar el comando "/" (al final git log hace un less asi que podemos usar los mismos comandos), y buscar el commit o el nombre de la rama que queramos visualizar en el arbol
Un comando alternativo para saber a que rama pertenece un commit es el siguiente:
git name-rev <COMMIT_HASH>
Podemos usar el comando git show para comprobar un commit concreto y ver todos los cambios que se han hecho en dicho commit
git show <COMMIT_HASH>
Si intentamos hacer el show del commit de un merge en algunas ocasiones no veremos ningun archivo, en estos casos (o siempre que hagamos show de un merge), tendremos que usar la opcion -m:
git show -m <COMMIT_HASH>
Si solo queremos ver los archivos cambiados y no el contenido podemos usar:
git show -m --name-status <COMMIT_HASH>
Podemos usar el comando git diff para comparar dos commits concretos
git diff <COMMIT_1>..<COMMIT_2>
git diff --name-only <COMMIT_1>..<COMMIT_2>
git diff <COMMIT_1>..<COMMIT_2> -- <ARCHIVO>
Normalmente para ver en que commits se ha modificado un archivo podemos hacer git log -p -- <archivo> pero si queremos ver los merges en los que ha estado involucrado y no solo los cambios podemos usar las opciones -m y --follow tal que asi:
git log -m --follow --name-status -- <archivo>
NOTA: La opción --follow nos permite seguir el histórico del archivo aunque haya cambiado de nombre, al combinarlo con la opción -m (que permite mostrar los cambios en los commits de merges) nos permite ver el pasó del archivo a traves de los merges en los que haya estádo el archivo
Una version mas completa que nos muestra las ramas de cada commit y el gráfico de las ramas es la siguiente:
git log --graph --source --all --name-status -m --follow -- <archivo>
Al usar las opciones -m --follow se puede omitir ciertos merges, si queremos mostrar toda la historia por la que pasa el archivo podemos hacerlo podemos hacerlo con --full-history tal que asi:
git log --name-status -m --full-history -- <archivo>
NOTA: La opcion --full-history tenemos que utilizarla SIN la opción --graph ni --follow si no se volverán a omitir ciertos merges
Con la opcion --first-parent nos permite ver en que commit concreto se introdujo el archivo en la rama en la que estamos.
Al usar esta opción solo se muestran los commits relacionados directamente con la rama actual (solo un nivel de profundidad):
git log --first-parent --name-status -- <archivo>
Git | log | show | diff